//
// @Auther: by wujehy 
// @Email:wujehy@qq.com
// @Data:2020/9/11
// @Time:4:18 下午
//
//

// 引入基本的头
#include <base_types.h> //基础类型头
#include "TestMod.h" //　模块头
#include "NetworkProtocol.h" //网络包业务类型头　

// 这个是日志系统的的
#include "glog/logging.h"
//这个是扩展的OpTestModSubType_Test3　测试的高级用法需要的头
#include "NetWork/NetworkManager.h"

using namespace GeeJoan;

void TestMod::init()
{

}

// 返回模块的类型
ModTypeEnum TestMod::mod_type()
{
    return ModType_TestMod;
}

//　当收到该类型的业务的时候会触发这个方法
//　hander　本次包的基本信息，如当前链接id,业务类型　，业务子类型，以及客户端的消息等
// code 是　StatusCodeTypeEnum 返回状态码的枚举类型
//　resposeBody 是要返回给客户端的数据
//　处理过程就是当收到这个数据包的时候　填充　处理过程的code 和需要返回给客户端的　resposeBody　即可
void TestMod::procMessage(const HanderDataType *hander, StatusCodeTypeEnum &code, std::string &resposeBody)
{
    LOGINFO << "  TestMod::procMessage client[" << int(hander->clientid) << "] subtype = " << hander->subtype << " msg = " << hander->message;


    if (OpTestModSubTypeEnum::OpTestModSubType_Test3)
    {
        // NOTE wujehy  , 高级用法， 使用 globalContext 访问其他 模块
        // 如果是Test3 则触发一次自定义操作
        int size = ((NetworkManager *) globalContext->networkManager)->getOnlineCount();
        LOGINFO << " test size = " << size;
    }

    if (hander->subtype == OpTestModSubType_Test2)
    {
        // 当子业务是Test2　的时候
        code = Status_SUCCESS; //　返回成功
        resposeBody = "end"; //返回end

    } else
    {
        //　同上　其他均返回pong
        code = Status_SUCCESS;
        resposeBody = "pong";
    }
//　如果觉得复杂，　注释上面的代码直接使用　下面的两行实现一个响应操作
//    code = Status_SUCCESS;
//    resposeBody = "pong";
}


